﻿using System.Collections.Generic;
using System.Linq;
using Acaweb.Common;
using System.ServiceModel.Activation;
using System;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;
using Components = Acaweb.Componentes.Contracts;

namespace Acaweb.Servicios.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class EstudiantesService : Contracts.IEstudiantesService
    {
        Components.IEstudiantesService _EstudianteComponent = AppCtx.Resolve<Components.IEstudiantesService>();

        public Estudiantes GetById(int CodigoEstudiante)
        {
            Estudiantes Estudiante = _EstudianteComponent.GetByCodigoEstudiante(CodigoEstudiante);

            return Estudiante;
        }

        public PeriodoAcademico GetLastPeriodoMatriculado(int CodigoEstudiante)
        {
            return _EstudianteComponent.GetLastPeriodoAcademico(CodigoEstudiante);
        }

        public void Create(Estudiantes Estudiante, Encuestas Encuesta)
        {
            _EstudianteComponent.Create(Estudiante, Encuesta);
        }

        public List<Estudiantes> GetListaEstudianteByCurso(CursoPk CursoPk)
        {
            Acaweb.Componentes.Contracts.ICursosMatriculadosService _CursoMatriculadoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.ICursosMatriculadosService>();

            List<CursosMatriculados> Lista = _CursoMatriculadoComponent.GetByCurso(CursoPk).ToList();
            List<Estudiantes> ListaEstudiante = new List<Estudiantes>();

            Lista.ForEach(t => ListaEstudiante.Add(_EstudianteComponent.GetByCodigoEstudiante(t.CursoMatriculadoPk.CodigoEstudiante)));

            return ListaEstudiante;
        }

        public List<Estudiantes> GetByEstado(EstadoEstudiante Estado, int skip, int limit)
        {
            return _EstudianteComponent.GetByEstadoEstudiante(Estado, skip, limit).ToList();
        }

        public void Update(Estudiantes Estudiante)
        {
            if (Estudiante.CodigoEstudiante == AuthenticationService.GetCurrent().ToInt())
                _EstudianteComponent.Update(Estudiante);
        }

        public List<PeriodoAcademico> GetPeriodos(int CodigoEstudiante)
        {
            return _EstudianteComponent.GetPeriodos(AuthenticationService.GetCurrent().ToInt()).ToList();
        }

        public List<Estudiantes> GetByDocumentoIdentidad(int DocumentoIdentidad)
        {
            return _EstudianteComponent.GetDocumentosIdentificacion(DocumentoIdentidad).ToList();
        }
        
        public Estudiantes _GetById()
        {
            return _EstudianteComponent.GetById(AuthenticationService.GetCurrent().ToInt());
        }

        public PeriodoAcademico _GetLastPeriodoMatriculado()
        {
            return _EstudianteComponent.GetLastPeriodoAcademico(AuthenticationService.GetCurrent().ToInt());
        }

        public string GenerarVolantePago()
        {
            return _EstudianteComponent.GenerarVolantePago(AuthenticationService.GetCurrent().ToInt());
        }
    }
}